package org.example.controller;
import com.alibaba.fastjson.JSON;
import org.example.common.response.ResponseData;
import org.example.entity.Car;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;


//当前控制器类的地址是”/api“
//类地址存在的意义是可以作为方法地址的命名空间
//不允许存储在两个“/sava”地址，但允许存在"/car/sava"和/record/sava

//@RestController注解：让当前类成为web控制器类
@RequestMapping("/api")
@CrossOrigin
@RestController
public class ApiController {
    //注解当前方法的地址是"/01"
    //控制器方法必须有地址，但是控制器类不一定
    //如果当前方法所在的类没有地址，则方法地址就是IP:端口/方法地址
    //如果当前方法所在的类有地址，则方法低值是IP：端口/类地址/方法地址
    @GetMapping("/01")
    public String m01(){
        return "兰博基尼";
    }
    @GetMapping("/02")
    public String m02(){
        return "玛莎拉蒂";
    }
    @GetMapping("/03/{brand}/{type}")
    public String m03(@PathVariable String brand,
                      @PathVariable String type){
        return brand +"："+type;
    }
    @GetMapping("/05")
    public String m05(HttpServletRequest request){
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        return username + ":" + password;
    }
    @GetMapping("/06")
    public String m06(Car param) {
        return param.getCarName() + ":" + param.getBrand();
    }
    @GetMapping("/07")
    public void m07(HttpServletResponse response) throws IOException {
        // 这个car是需要返回给前端的对象
        Car car = new Car(8,"兰博基尼","兰博基尼",18.5,0);
        // 设置字符集
        response.setCharacterEncoding("utf-8");
        // 设置内容类型为json格式
        response.setContentType("application/json;charset=utf-8");
        // 获取输出流
        PrintWriter out = response.getWriter();
        // 用JSON工具类把对象转为json字符串
        String json = JSON.toJSONString(car);
        // 用输出流输出这个json字符串
        out.write(json);
        // 冲刷输出流
        out.flush();
        // 关闭输出流
        out.close();
    }
    @GetMapping("/08")
    public List<Integer> m08() {
        // 这个car是需要返回给前端的对象
        List<Integer> integers=new ArrayList<Integer>(){{
            add(1);
            add(2);
            add(3);
            add(4);
        }};

        return integers ;
    }

    @GetMapping("/09")
    public ResponseData m09(){
        return ResponseData.success();
    }
    @GetMapping("/10")
    public ResponseData m10(){
        Car car=new Car(8,"兰博基尼","兰博基尼",18.5,0);
        return ResponseData.success(car);
    }
}
